/**
 * {作业名称}
 *
 * 输入参数:
 *
 * 输出参数:
 *
 */
(() => {
  // 私有区域

  return function ({ UID, Records }) {
    // 验证输入参数
    if (!UID) throw Error("无效会话");

    // 处理逻辑
    A.db.trans('MP', conn => {
      // 入库单明细可以直接生成库存台账
      const { Rows } = A.job.CardR(UID, 'ST.入库单明细', ['入库单', '入库单.单号', '入库单.仓库', '品规', '生产日期', '数量', '单价', '金额'],
        [['入库单', 'in', Records.map(r => r.ID)]]);
      if (Rows.length === 0) throw Error("没有选中的入库单明细");

      A.job.CardW(UID, 'ST.库存台账', null, Rows.map(r => ({
        '仓库': r['入库单.仓库'],
        '品规': r.品规,
        '生产日期': r.生产日期,
        '数量': r.数量,
        '余量': r.数量,
        '单价': r.单价,
        '金额': 0 - r.金额,
        '摘要': '入库:' + r['入库单.单号'],
      })));

      // 汇总入库单明细总量
      Rows.forEach(r => {
        Rows[r.入库单] = Rows[r.入库单] ?? { 总数量: 0, 总金额: 0 };
        Rows[r.入库单].总数量 += r.数量;
        Rows[r.入库单].总金额 += r.金额;
      });
      // 最后更新入库单状态
      A.job.CardW(UID, 'ST.入库单', null, Records.map(r => ({
        'ID': r.ID,
        '入库日期': new Date(),
        '总数量': Rows[r.ID].总数量,
        '总金额': Rows[r.ID].总金额,
      })));
    });

    // 返回结果
    return true;
  };
})()